608060405234801561000f575f80fd5b5060405162001c2b38038062001c2b833981016040819052610030916100c7565b6100398161003f565b506100f4565b7f4a2e063d7927ca38537b0341d79ba5f6ec64f53c703a2b83451e20c0465d06138054604080516001600160a01b039283168152918416602083015280517f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f9281900390910190a180546001600160a01b0319166001600160a01b0392909216919091179055565b5f602082840312156100d7575f80fd5b81516001600160a01b03811681146100ed575f80fd5b9392505050565b611b2980620001025f395ff3fe6080604052600436106100e7575f3560e01c80638c3d730111610089578063c2d52f8f11610058578063c2d52f8f14610279578063d046815614610298578063f3d3d797146102ac578063f5e130e7146102d8576100e7565b80638c3d7301146101fb5780638f2839701461020f578063ac9650d81461022e578063b8fb0afa1461025a576100e7565b80631faee24f116100c55780631faee24f146101705780634e12924314610191578063678780a8146101c85780636e9960c3146101e7576100e7565b806301ffc9a7146100f15780630218cac11461012557806315800cae14610151575b6100ef6102ec565b005b3480156100fc575f80fd5b5061011061010b3660046113b4565b6102fe565b60405190151581526020015b60405180910390f35b348015610130575f80fd5b5061014461013f3660046113e3565b6103d8565b60405161011c91906113fc565b34801561015c575f80fd5b506100ef61016b3660046114b7565b6104c2565b34801561017b575f80fd5b5061018461050d565b60405161011c91906115df565b34801561019c575f80fd5b506101b06101ab3660046113b4565b6106c1565b6040516001600160a01b03909116815260200161011c565b3480156101d3575f80fd5b506100ef6101e236600461166f565b6106ff565b3480156101f2575f80fd5b506101b0610745565b348015610206575f80fd5b506100ef61075f565b34801561021a575f80fd5b506100ef6102293660046113e3565b610826565b348015610239575f80fd5b5061024d6102483660046116eb565b6108cb565b60405161011c919061175a565b348015610265575f80fd5b506100ef6102743660046114b7565b6109bf565b348015610284575f80fd5b506101b06102933660046113b4565b6109fd565b3480156102a3575f80fd5b506101b0610a07565b3480156102b7575f80fd5b506102c0610a24565b6040516001600160601b03909116815260200161011c565b3480156102e3575f80fd5b506100ef610a48565b6102fc6102f7610ace565b610b31565b565b5f6001600160e01b0319821663159f81fd60e01b148061032e57506301ffc9a760e01b6001600160e01b03198316145b1561033b57506001919050565b5f610344610ace565b90506001600160a01b038116156103ca576040516301ffc9a760e01b81526001600160e01b0319841660048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156103a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103c591906117ba565b6103cc565b5f5b9392505050565b919050565b60605f6103e3610b54565b6001600160a01b0384165f90815260038201602052604081209192509061040990610b78565b90508067ffffffffffffffff81111561042457610424611449565b60405190808252806020026020018201604052801561044d578160200160208202803683370190505b5092505f5b818110156104ba576001600160a01b0385165f908152600384016020526040902061047d9082610b81565b84828151811061048f5761048f6117d9565b6001600160e01b0319909216602092830291909101909101526104b3600182611801565b9050610452565b505050919050565b5f6104cb610b54565b80549091506001600160a01b031633146105005760405162461bcd60e51b81526004016104f790611814565b60405180910390fd5b61050982610b8c565b5050565b60605f610518610b54565b9050600181015f61052882610b78565b90508067ffffffffffffffff81111561054357610543611449565b60405190808252806020026020018201604052801561058f57816020015b60408051606080820183525f8083526020830152918101919091528152602001906001900390816105615790505b5093505f5b818110156106ba57600484015f6105ab8584610b81565b6001600160e01b0319908116825260208083019390935260409182015f208251606081018452815460e081901b90931681526401000000009092046001600160a01b03169382019390935260018301805491939284019161060b9061184b565b80601f01602080910402602001604051908101604052809291908181526020018280546106379061184b565b80156106825780601f1061065957610100808354040283529160200191610682565b820191905f5260205f20905b81548152906001019060200180831161066557829003601f168201915b50505050508152505085828151811061069d5761069d6117d9565b60209081029190910101526106b3600182611801565b9050610594565b5050505090565b5f806106cb610b54565b6001600160e01b03199093165f9081526004909301602052505060409020546001600160a01b036401000000009091041690565b5f610708610b54565b80549091506001600160a01b031633146107345760405162461bcd60e51b81526004016104f790611814565b61073f848484610d54565b50505050565b5f8061074f610b54565b546001600160a01b031692915050565b5f610768610b54565b60058101549091506001600160a01b0316331480156107b0575060058101546107a490600160a01b90046001600160601b031662015180611883565b6001600160601b031642115b6108065760405162461bcd60e51b815260206004820152602160248201527f526f757465723a2041646d696e20726f6c65206e6f7420617661696c61626c656044820152601760f91b60648201526084016104f7565b600581015461081d906001600160a01b0316610eb1565b5f600590910155565b5f61082f610b54565b80549091506001600160a01b0316331461085b5760405162461bcd60e51b81526004016104f790611814565b5f610864610b54565b6001600160601b0342908116600160a01b026001600160a01b03861690811760058401556040805191825260208201929092529192507fdff178ebb2279491077ea123f009769d6d541aacd41a890ec61d81fa22bb800c91015b60405180910390a1505050565b60608167ffffffffffffffff8111156108e6576108e6611449565b60405190808252806020026020018201604052801561091957816020015b60608152602001906001900390816109045790505b5090505f5b828110156109b7576109873085858481811061093c5761093c6117d9565b905060200281019061094e91906118a3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610f2392505050565b828281518110610999576109996117d9565b602002602001018190525080806109af906118ed565b91505061091e565b505b92915050565b5f6109c8610b54565b80549091506001600160a01b031633146109f45760405162461bcd60e51b81526004016104f790611814565b61050982610f95565b5f6109b9826106c1565b5f80610a11610b54565b600501546001600160a01b031692915050565b5f80610a2e610b54565b60050154600160a01b90046001600160601b031692915050565b5f610a51610b54565b80549091506001600160a01b03163314610a7d5760405162461bcd60e51b81526004016104f790611814565b5f610a86610b54565b6005810180545f9091556040516001600160a01b039091168082529192507fe2e622963376760e51863f60e7a27a5ca113dd3ec08b2fe6bed6a184982cec40906020016108be565b5f80610ae45f356001600160e01b0319166106c1565b90506001600160a01b0381166103d35760405162461bcd60e51b81526020600482015260126024820152712937baba32b91d102737ba103337bab7321760711b60448201526064016104f7565b365f80375f80365f845af43d5f803e808015610b4b573d5ff35b3d5ffd5b505050565b7f4a2e063d7927ca38537b0341d79ba5f6ec64f53c703a2b83451e20c0465d061390565b5f6109b9825490565b5f6103cc838361116c565b5f610b95610b54565b8251909150610bb29060018301906001600160e01b031916611192565b610c0a5760405162461bcd60e51b815260206004820152602360248201527f526f757465723a20726f757465722065786973747320666f722066756e63746960448201526237b71760e91b60648201526084016104f7565b8160400151604051602001610c1f9190611905565b604051602081830303815290604052805190602001206001600160e01b031916825f01516001600160e01b03191614610c6a5760405162461bcd60e51b81526004016104f790611920565b81516001600160e01b0319165f90815260048201602090815260409182902084518154928601516001600160a01b0316640100000000026001600160c01b031990931660e09190911c17919091178155908301518391906001820190610cd090826119b8565b505082516020808501516001600160a01b03165f9081526003850190915260409020610d079250906001600160e01b031916611192565b5081602001516001600160a01b0316825f01516001600160e01b0319167fb8d3168400543cb1f93defbb510faf4f210a8165083daa84f56c93275659d21b60405160405180910390a35050565b5f610d5d610b54565b90505f610d69856106c1565b90506001600160a01b038116610d915760405162461bcd60e51b81526004016104f790611a74565b8383604051602001610da4929190611abd565b604051602081830303815290604052805190602001206001600160e01b031916856001600160e01b03191614610dec5760405162461bcd60e51b81526004016104f790611920565b6001600160e01b031985165f908152600483016020526040812080546001600160c01b031916815590610e226001830182611353565b50610e3c9050600183016001600160e01b0319871661119d565b506001600160a01b0381165f9081526003830160205260409020610e6a906001600160e01b0319871661119d565b506040516001600160a01b038216906001600160e01b03198716907fb64f342b43109828889941f7ca368bafe02178e0ef5cee3d51f99d9a74977c68905f90a35050505050565b5f610eba610b54565b8054604080516001600160a01b03928316815291851660208301529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a180546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b031684604051610f3f9190611905565b5f60405180830381855af49150503d805f8114610f77576040519150601f19603f3d011682016040523d82523d5f602084013e610f7c565b606091505b5091509150610f8c8583836111a8565b95945050505050565b5f610fa2825f01516109fd565b90506001600160a01b038116610fca5760405162461bcd60e51b81526004016104f790611a74565b8160400151604051602001610fdf9190611905565b604051602081830303815290604052805190602001206001600160e01b031916825f01516001600160e01b0319161461102a5760405162461bcd60e51b81526004016104f790611920565b5f611033610b54565b83519091506110509060018301906001600160e01b031916611192565b5082516001600160e01b0319165f90815260048201602090815260409182902085518154928701516001600160a01b0316640100000000026001600160c01b031990931660e09190911c179190911781559084015184919060018201906110b790826119b8565b505083516001600160a01b0384165f90815260038401602052604090206110e99250906001600160e01b03191661119d565b5082516020808501516001600160a01b03165f908152600384019091526040902061111d916001600160e01b031916611192565b50602083015183516040516001600160a01b03928316928516916001600160e01b031916907f39b8ab90488766f7b7d5e73f0491c3b8455e0cd2f43963f34997d2222e47e8fe905f90a4505050565b5f825f018281548110611181576111816117d9565b905f5260205f200154905092915050565b5f6103cc83836111f8565b5f6103cc8383611244565b6060826111b8576103c582611327565b81511580156111cf57506001600160a01b0384163b155b156109b757604051639996b31560e01b81526001600160a01b03851660048201526024016104f7565b5f81815260018301602052604081205461123d57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556109b9565b505f6109b9565b5f818152600183016020526040812054801561131e575f611266600183611acc565b85549091505f9061127990600190611acc565b90508082146112d8575f865f018281548110611297576112976117d9565b905f5260205f200154905080875f0184815481106112b7576112b76117d9565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806112e9576112e9611adf565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506109b9565b5f9150506109b9565b8051156113375780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b50805461135f9061184b565b5f825580601f1061136e575050565b601f0160209004905f5260205f209081019061135091905b80821115611399575f8155600101611386565b5090565b80356001600160e01b0319811681146103d3575f80fd5b5f602082840312156113c4575f80fd5b6103cc8261139d565b80356001600160a01b03811681146103d3575f80fd5b5f602082840312156113f3575f80fd5b6103cc826113cd565b602080825282518282018190525f9190848201906040850190845b8181101561143d5783516001600160e01b03191683529284019291840191600101611417565b50909695505050505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561148057611480611449565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156114af576114af611449565b604052919050565b5f60208083850312156114c8575f80fd5b823567ffffffffffffffff808211156114df575f80fd5b90840190606082870312156114f2575f80fd5b6114fa61145d565b6115038361139d565b81526115108484016113cd565b84820152604083013582811115611525575f80fd5b80840193505086601f840112611539575f80fd5b82358281111561154b5761154b611449565b61155d601f8201601f19168601611486565b92508083528785828601011115611572575f80fd5b80858501868501375f908301909401939093526040830152509392505050565b5f5b838110156115ac578181015183820152602001611594565b50505f910152565b5f81518084526115cb816020860160208601611592565b601f01601f19169290920160200192915050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b8381101561166157888303603f19018552815180516001600160e01b0319168452878101516001600160a01b031688850152860151606087850181905261164d818601836115b4565b968901969450505090860190600101611604565b509098975050505050505050565b5f805f60408486031215611681575f80fd5b61168a8461139d565b9250602084013567ffffffffffffffff808211156116a6575f80fd5b818601915086601f8301126116b9575f80fd5b8135818111156116c7575f80fd5b8760208285010111156116d8575f80fd5b6020830194508093505050509250925092565b5f80602083850312156116fc575f80fd5b823567ffffffffffffffff80821115611713575f80fd5b818501915085601f830112611726575f80fd5b813581811115611734575f80fd5b8660208260051b8501011115611748575f80fd5b60209290920196919550909350505050565b5f602080830181845280855180835260408601915060408160051b87010192508387015f5b828110156117ad57603f1988860301845261179b8583516115b4565b9450928501929085019060010161177f565b5092979650505050505050565b5f602082840312156117ca575f80fd5b815180151581146103cc575f80fd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156109b9576109b96117ed565b60208082526017908201527f526f757465723a204e6f7420617574686f72697a65642e000000000000000000604082015260600190565b600181811c9082168061185f57607f821691505b60208210810361187d57634e487b7160e01b5f52602260045260245ffd5b50919050565b6001600160601b038181168382160190808211156109b7576109b76117ed565b5f808335601e198436030181126118b8575f80fd5b83018035915067ffffffffffffffff8211156118d2575f80fd5b6020019150368190038213156118e6575f80fd5b9250929050565b5f600182016118fe576118fe6117ed565b5060010190565b5f8251611916818460208701611592565b9190910192915050565b6020808252602b908201527f526f757465723a20666e2073656c6563746f7220616e64207369676e6174757260408201526a329036b4b9b6b0ba31b41760a91b606082015260800190565b601f821115610b4f575f81815260208120601f850160051c810160208610156119915750805b601f850160051c820191505b818110156119b05782815560010161199d565b505050505050565b815167ffffffffffffffff8111156119d2576119d2611449565b6119e6816119e0845461184b565b8461196b565b602080601f831160018114611a19575f8415611a025750858301515b5f19600386901b1c1916600185901b1785556119b0565b5f85815260208120601f198616915b82811015611a4757888601518255948401946001909101908401611a28565b5085821015611a6457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526029908201527f526f757465723a204e6f20726f7574657220617661696c61626c6520666f722060408201526839b2b632b1ba37b91760b91b606082015260800190565b818382375f9101908152919050565b818103818111156109b9576109b96117ed565b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220a6d659efc2112638ba341cb85097b14c373c18becbba20c453f4f09fa035893f64736f6c63430008140033000000000000000000000000a860b0c8187ae5eaf719a5d56334a53bcbade3d9