{
  "_format": "hh-sol-artifact-1",
  "contractName": "ACL",
  "sourceName": "contracts/ACL.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "ERC1967InvalidImplementation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC1967NonPayable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UUPSUnauthorizedCallContext",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "slot",
          "type": "bytes32"
        }
      ],
      "name": "UUPSUnsupportedProxiableUUID",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "handlesList",
          "type": "uint256[]"
        }
      ],
      "name": "AllowedForDecryption",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "NewDelegation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "UPGRADE_INTERFACE_VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "handle",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "allow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "handlesList",
          "type": "uint256[]"
        }
      ],
      "name": "allowForDecryption",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "handle",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "allowTransient",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "handle",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "allowedOnBehalf",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "handle",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "allowedTransient",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cleanTransientStorage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "delegateAccountForContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTFHEExecutorAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVersion",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "initialOwner",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "handle",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "handle",
          "type": "uint256"
        }
      ],
      "name": "isAllowedForDecryption",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "handle",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "persistAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a080604052346100cc57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c166100bd57506001600160401b036002600160401b031982821601610078575b60405161138090816100d18239608051818181610b090152610bde0152f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f8080610059565b63f92ee8a960e01b8152600490fd5b5f80fdfe60806040818152600480361015610014575f80fd5b5f3560e01c9283630d8e6e2c14610e525750826335334c2314610e1d57826337e6b44f14610db95782634f1ef28614610b6557826352d1902d14610aee578263557e10041461097c5782635faa299a146109565782636330a7091461090b57826365d0509c1461089b578263715018a6146107fb57826379ba5097146107995782637a9a598e1461076a5782638d9c9c92146106c85782638da5cb5b14610682578263a90cd91d14610654578263ad3cb1cc146105fc578263b198d65714610460578263c4d66de81461030b57508163ccd9a7cd146101f7578163e30c3978146101b2575063f2fde38b14610107575f80fd5b346101ae5760203660031901126101ae5761012061108f565b6101286111f6565b6001600160a01b03809116907f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00826001600160a01b03198254161790557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b346101ae575f3660031901126101ae576020906001600160a01b037f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0054169051908152f35b346101ae5760803660031901126101ae5761021061108f565b90602435906044356001600160a01b03938482168092036101ae5760643594808616958681036101ae57855f527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc00602097818952865f20905f52885260ff865f20541696876102ec575b50508561028e575b50505050519015158152f35b6102cd9192939495506001600160a01b03165f527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc0260205260405f2090565b91165f528352815f20905f52825260ff815f2054169083808080610282565b909196505f528652835f20835f52865260ff845f20541694878061027a565b346101ae5760203660031901126101ae5761032461108f565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009182549160ff83861c16159267ffffffffffffffff811680159081610458575b600114908161044e575b159081610445575b506104365767ffffffffffffffff198116600117855583610417575b5061039d6112cf565b6103a56112cf565b6001600160a01b0382161561040157506103be90611241565b6103c457005b805468ff00000000000000001916905551600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b6024905f865191631e4fbdf760e01b8352820152fd5b68ffffffffffffffffff19166801000000000000000117845585610394565b50845163f92ee8a960e01b8152fd5b90501587610378565b303b159150610370565b859150610366565b90346101ae57806003193601126101ae5761047961108f565b90610482611079565b926001600160a01b038094169333851461059357335f9081527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc0260205260409020931692835f52602052815f20845f5260205260ff825f2054166105515750335f9081527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc0260205260409020825f52602052805f20835f526020525f20600160ff19825416179055337ff03b7c0d4879b0bcbbf440794871f139c96fd13a145a8172b33b9cab5fa2830a5f80a4005b6020606492519162461bcd60e51b8352820152601160248201527f616c72656164792064656c6567617465640000000000000000000000000000006044820152fd5b506020608492519162461bcd60e51b8352820152603360248201527f636f6e7472616374416464726573732073686f756c642062652064696666657260448201527f656e742066726f6d206d73672e73656e646572000000000000000000000000006064820152fd5b50346101ae575f3660031901126101ae5780516106509161061c826110a5565b600582527f352e302e300000000000000000000000000000000000000000000000000000006020830152519182918261104d565b0390f35b50346101ae575f3660031901126101ae576020905173687408ab54661ba0b4aef3a44156c616c6955e078152f35b50346101ae575f3660031901126101ae576020906001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054169051908152f35b346101ae57816003193601126101ae576107406107329135926106e9611079565b9073687408ab54661ba0b4aef3a44156c616c6955e073303610753575b516020810194855260609190911b6bffffffffffffffffffffffff191660408201529182906054820190565b03601f1981018352826110d5565b5190206001815d60015f5c0190815d5f5d005b610765610760338761115f565b611113565b610706565b90346101ae57806003193601126101ae57610790602092610789611079565b90356111bd565b90519015158152f35b346101ae575f3660031901126101ae57336001600160a01b037f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c005416036107e5576107e333611241565b005b602491519063118cdaa760e01b82523390820152fd5b346101ae575f3660031901126101ae576108136111f6565b5f6001600160a01b036001600160a01b03197f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c008181541690557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080549182169055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101ae57816003193601126101ae57356108b4611079565b906108c2610760338361115f565b5f527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc006020526001600160a01b03825f2091165f526020525f20600160ff198254161790555f80f35b90346101ae5760203660031901126101ae57602091355f527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc01825260ff815f20541690519015158152f35b90346101ae57806003193601126101ae57610790602092610975611079565b903561115f565b90346101ae57602091826003193601126101ae5780359267ffffffffffffffff918285116101ae57366023860112156101ae5784810135926024908411610adb576005908460051b968651956109d4868a01886110d5565b865284860160248199830101913683116101ae576024879101915b838310610acb57505050508451925f5b848110610a605787518681528751818801819052818a0191908b90895f5b828110610a4c577f2fd616621b8415a2efb27b224024340ac767797553ce6fdf4c1adefd160504c685870386a1005b835186529481019492810192600101610a1d565b8651811015610ab9578086600192861b89010151610a81610760338361115f565b5f527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc018752885f208260ff19825416179055016109ff565b50603290634e487b7160e01b5f52525ffd5b82358152918101918791016109ef565b604182634e487b7160e01b5f525260245ffd5b90346101ae575f3660031901126101ae576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b5857602090517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b5163703e46dd60e11b8152fd5b816003193601126101ae57610b7861108f565b602492833567ffffffffffffffff81116101ae57366023820112156101ae5780840135610ba4816110f7565b93610bb1845195866110d5565b81855260209182860193368983830101116101ae57815f928a8693018737870101526001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016803014908115610d8b575b50610d7b57610c166111f6565b81169484516352d1902d60e01b8152838189818a5afa5f9181610d4c575b50610c4f5750505050505191634c9c8ce360e01b8352820152fd5b9087878794938b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91828103610d375750853b15610d235750816001600160a01b03198254161790558451907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2825115610d095750505f6107e39581925190845af4913d15610cff573d610cf1610ce8826110f7565b925192836110d5565b81525f81943d92013e611310565b5060609250611310565b9450945050505034610d1757005b63b398979f60e01b8152fd5b8651634c9c8ce360e01b8152808501849052fd5b8751632a87526960e21b815280860191909152fd5b9091508481813d8311610d74575b610d6481836110d5565b810103126101ae5751908a610c34565b503d610d5a565b845163703e46dd60e11b81528790fd5b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141589610c09565b90346101ae57806003193601126101ae57602091610dd5611079565b90355f527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc0083526001600160a01b03825f2091165f52825260ff815f20541690519015158152f35b346101ae575f3660031901126101ae575f5c5f805d600180910160015b818110610e4357005b805f84925c81835d5d01610e3a565b9250346101ae575f3660031901126101ae57610e6d836110a5565b6003835260209283810193621050d360ea1b85525f90845191610e8f836110a5565b600190818452828401908336833760218501835b610fef575b50508190875193610eb8856110a5565b838552808501928136853760218601855b610fb2575b50505f95895194610ede866110a5565b8086528286019783368a3760218701825b610f7c575b50505089519a8b98519081848b01610f0b9261102c565b880191820161103b60f11b905251918260228301610f289261102c565b01601760f91b9384602283015251918260238301610f459261102c565b0191602383015251918260248301610f5c9261102c565b01039081018352602401610f7090836110d5565b5161065081928261104d565b5f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304918215610fad57919082610eef565b610ef4565b9496945f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a83530490878215610fe6579597610ec9565b50969496610ece565b9294925f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a83530490858215611023579395610ea3565b50949294610ea8565b5f5b83811061103d5750505f910152565b818101518382015260200161102e565b6040916020825261106d815180928160208601526020868601910161102c565b601f01601f1916010190565b602435906001600160a01b03821682036101ae57565b600435906001600160a01b03821682036101ae57565b6040810190811067ffffffffffffffff8211176110c157604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176110c157604052565b67ffffffffffffffff81116110c157601f01601f191660200190565b1561111a57565b60405162461bcd60e51b815260206004820152601460248201527f73656e6465722069736e277420616c6c6f7765640000000000000000000000006044820152606490fd5b9061116a81836111bd565b91821561117657505090565b9091505f527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc006020526001600160a01b0360405f2091165f5260205260ff60405f20541690565b604080516020810192835260609390931b6bffffffffffffffffffffffff191690830152906111ef8160548101610732565b5190205c90565b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361122957565b60405163118cdaa760e01b8152336004820152602490fd5b6001600160a01b0319907f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c008281541690557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993008054906001600160a01b0380931680948316179055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156112fe57565b604051631afcd79f60e31b8152600490fd5b90611337575080511561132557805190602001fd5b60405163d6bda27560e01b8152600490fd5b8151158061136a575b611348575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561134056fea164736f6c6343000818000a",
  "deployedBytecode": "0x60806040818152600480361015610014575f80fd5b5f3560e01c9283630d8e6e2c14610e525750826335334c2314610e1d57826337e6b44f14610db95782634f1ef28614610b6557826352d1902d14610aee578263557e10041461097c5782635faa299a146109565782636330a7091461090b57826365d0509c1461089b578263715018a6146107fb57826379ba5097146107995782637a9a598e1461076a5782638d9c9c92146106c85782638da5cb5b14610682578263a90cd91d14610654578263ad3cb1cc146105fc578263b198d65714610460578263c4d66de81461030b57508163ccd9a7cd146101f7578163e30c3978146101b2575063f2fde38b14610107575f80fd5b346101ae5760203660031901126101ae5761012061108f565b6101286111f6565b6001600160a01b03809116907f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00826001600160a01b03198254161790557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b346101ae575f3660031901126101ae576020906001600160a01b037f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0054169051908152f35b346101ae5760803660031901126101ae5761021061108f565b90602435906044356001600160a01b03938482168092036101ae5760643594808616958681036101ae57855f527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc00602097818952865f20905f52885260ff865f20541696876102ec575b50508561028e575b50505050519015158152f35b6102cd9192939495506001600160a01b03165f527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc0260205260405f2090565b91165f528352815f20905f52825260ff815f2054169083808080610282565b909196505f528652835f20835f52865260ff845f20541694878061027a565b346101ae5760203660031901126101ae5761032461108f565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009182549160ff83861c16159267ffffffffffffffff811680159081610458575b600114908161044e575b159081610445575b506104365767ffffffffffffffff198116600117855583610417575b5061039d6112cf565b6103a56112cf565b6001600160a01b0382161561040157506103be90611241565b6103c457005b805468ff00000000000000001916905551600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b6024905f865191631e4fbdf760e01b8352820152fd5b68ffffffffffffffffff19166801000000000000000117845585610394565b50845163f92ee8a960e01b8152fd5b90501587610378565b303b159150610370565b859150610366565b90346101ae57806003193601126101ae5761047961108f565b90610482611079565b926001600160a01b038094169333851461059357335f9081527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc0260205260409020931692835f52602052815f20845f5260205260ff825f2054166105515750335f9081527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc0260205260409020825f52602052805f20835f526020525f20600160ff19825416179055337ff03b7c0d4879b0bcbbf440794871f139c96fd13a145a8172b33b9cab5fa2830a5f80a4005b6020606492519162461bcd60e51b8352820152601160248201527f616c72656164792064656c6567617465640000000000000000000000000000006044820152fd5b506020608492519162461bcd60e51b8352820152603360248201527f636f6e7472616374416464726573732073686f756c642062652064696666657260448201527f656e742066726f6d206d73672e73656e646572000000000000000000000000006064820152fd5b50346101ae575f3660031901126101ae5780516106509161061c826110a5565b600582527f352e302e300000000000000000000000000000000000000000000000000000006020830152519182918261104d565b0390f35b50346101ae575f3660031901126101ae576020905173687408ab54661ba0b4aef3a44156c616c6955e078152f35b50346101ae575f3660031901126101ae576020906001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054169051908152f35b346101ae57816003193601126101ae576107406107329135926106e9611079565b9073687408ab54661ba0b4aef3a44156c616c6955e073303610753575b516020810194855260609190911b6bffffffffffffffffffffffff191660408201529182906054820190565b03601f1981018352826110d5565b5190206001815d60015f5c0190815d5f5d005b610765610760338761115f565b611113565b610706565b90346101ae57806003193601126101ae57610790602092610789611079565b90356111bd565b90519015158152f35b346101ae575f3660031901126101ae57336001600160a01b037f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c005416036107e5576107e333611241565b005b602491519063118cdaa760e01b82523390820152fd5b346101ae575f3660031901126101ae576108136111f6565b5f6001600160a01b036001600160a01b03197f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c008181541690557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080549182169055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101ae57816003193601126101ae57356108b4611079565b906108c2610760338361115f565b5f527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc006020526001600160a01b03825f2091165f526020525f20600160ff198254161790555f80f35b90346101ae5760203660031901126101ae57602091355f527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc01825260ff815f20541690519015158152f35b90346101ae57806003193601126101ae57610790602092610975611079565b903561115f565b90346101ae57602091826003193601126101ae5780359267ffffffffffffffff918285116101ae57366023860112156101ae5784810135926024908411610adb576005908460051b968651956109d4868a01886110d5565b865284860160248199830101913683116101ae576024879101915b838310610acb57505050508451925f5b848110610a605787518681528751818801819052818a0191908b90895f5b828110610a4c577f2fd616621b8415a2efb27b224024340ac767797553ce6fdf4c1adefd160504c685870386a1005b835186529481019492810192600101610a1d565b8651811015610ab9578086600192861b89010151610a81610760338361115f565b5f527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc018752885f208260ff19825416179055016109ff565b50603290634e487b7160e01b5f52525ffd5b82358152918101918791016109ef565b604182634e487b7160e01b5f525260245ffd5b90346101ae575f3660031901126101ae576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b5857602090517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b5163703e46dd60e11b8152fd5b816003193601126101ae57610b7861108f565b602492833567ffffffffffffffff81116101ae57366023820112156101ae5780840135610ba4816110f7565b93610bb1845195866110d5565b81855260209182860193368983830101116101ae57815f928a8693018737870101526001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016803014908115610d8b575b50610d7b57610c166111f6565b81169484516352d1902d60e01b8152838189818a5afa5f9181610d4c575b50610c4f5750505050505191634c9c8ce360e01b8352820152fd5b9087878794938b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91828103610d375750853b15610d235750816001600160a01b03198254161790558451907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2825115610d095750505f6107e39581925190845af4913d15610cff573d610cf1610ce8826110f7565b925192836110d5565b81525f81943d92013e611310565b5060609250611310565b9450945050505034610d1757005b63b398979f60e01b8152fd5b8651634c9c8ce360e01b8152808501849052fd5b8751632a87526960e21b815280860191909152fd5b9091508481813d8311610d74575b610d6481836110d5565b810103126101ae5751908a610c34565b503d610d5a565b845163703e46dd60e11b81528790fd5b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141589610c09565b90346101ae57806003193601126101ae57602091610dd5611079565b90355f527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc0083526001600160a01b03825f2091165f52825260ff815f20541690519015158152f35b346101ae575f3660031901126101ae575f5c5f805d600180910160015b818110610e4357005b805f84925c81835d5d01610e3a565b9250346101ae575f3660031901126101ae57610e6d836110a5565b6003835260209283810193621050d360ea1b85525f90845191610e8f836110a5565b600190818452828401908336833760218501835b610fef575b50508190875193610eb8856110a5565b838552808501928136853760218601855b610fb2575b50505f95895194610ede866110a5565b8086528286019783368a3760218701825b610f7c575b50505089519a8b98519081848b01610f0b9261102c565b880191820161103b60f11b905251918260228301610f289261102c565b01601760f91b9384602283015251918260238301610f459261102c565b0191602383015251918260248301610f5c9261102c565b01039081018352602401610f7090836110d5565b5161065081928261104d565b5f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304918215610fad57919082610eef565b610ef4565b9496945f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a83530490878215610fe6579597610ec9565b50969496610ece565b9294925f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a83530490858215611023579395610ea3565b50949294610ea8565b5f5b83811061103d5750505f910152565b818101518382015260200161102e565b6040916020825261106d815180928160208601526020868601910161102c565b601f01601f1916010190565b602435906001600160a01b03821682036101ae57565b600435906001600160a01b03821682036101ae57565b6040810190811067ffffffffffffffff8211176110c157604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176110c157604052565b67ffffffffffffffff81116110c157601f01601f191660200190565b1561111a57565b60405162461bcd60e51b815260206004820152601460248201527f73656e6465722069736e277420616c6c6f7765640000000000000000000000006044820152606490fd5b9061116a81836111bd565b91821561117657505090565b9091505f527fa688f31953c2015baaf8c0a488ee1ee22eb0e05273cc1fd31ea4cbee42febc006020526001600160a01b0360405f2091165f5260205260ff60405f20541690565b604080516020810192835260609390931b6bffffffffffffffffffffffff191690830152906111ef8160548101610732565b5190205c90565b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361122957565b60405163118cdaa760e01b8152336004820152602490fd5b6001600160a01b0319907f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c008281541690557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993008054906001600160a01b0380931680948316179055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156112fe57565b604051631afcd79f60e31b8152600490fd5b90611337575080511561132557805190602001fd5b60405163d6bda27560e01b8152600490fd5b8151158061136a575b611348575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561134056fea164736f6c6343000818000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
